home *** CD-ROM | disk | FTP | other *** search
/ Champak 141 / (Vol 141) Oct 17 2011.iso / Games / despereaux-swings.swf / scripts / Box2D / Dynamics / Contacts / b2PolygonContact.as < prev   
Encoding:
Text File  |  2011-10-17  |  5.5 KB  |  150 lines

  1. package Box2D.Dynamics.Contacts
  2. {
  3.    import Box2D.Collision.Shapes.b2PolygonShape;
  4.    import Box2D.Collision.Shapes.b2Shape;
  5.    import Box2D.Collision.b2Collision;
  6.    import Box2D.Collision.b2ContactPoint;
  7.    import Box2D.Collision.b2Manifold;
  8.    import Box2D.Collision.b2ManifoldPoint;
  9.    import Box2D.Common.Math.b2Vec2;
  10.    import Box2D.Dynamics.b2Body;
  11.    import Box2D.Dynamics.b2ContactListener;
  12.    
  13.    public class b2PolygonContact extends b2Contact
  14.    {
  15.       
  16.       private static const s_evalCP:b2ContactPoint = new b2ContactPoint();
  17.        
  18.       
  19.       private var m_manifolds:Array;
  20.       
  21.       private var m0:b2Manifold;
  22.       
  23.       public var m_manifold:b2Manifold;
  24.       
  25.       public function b2PolygonContact(param1:b2Shape, param2:b2Shape)
  26.       {
  27.          m0 = new b2Manifold();
  28.          m_manifolds = [new b2Manifold()];
  29.          super(param1,param2);
  30.          m_manifold = m_manifolds[0];
  31.          m_manifold.pointCount = 0;
  32.       }
  33.       
  34.       public static function Destroy(param1:b2Contact, param2:*) : void
  35.       {
  36.       }
  37.       
  38.       public static function Create(param1:b2Shape, param2:b2Shape, param3:*) : b2Contact
  39.       {
  40.          return new b2PolygonContact(param1,param2);
  41.       }
  42.       
  43.       override public function GetManifolds() : Array
  44.       {
  45.          return m_manifolds;
  46.       }
  47.       
  48.       override public function Evaluate(param1:b2ContactListener) : void
  49.       {
  50.          var _loc2_:b2Vec2 = null;
  51.          var _loc3_:b2Vec2 = null;
  52.          var _loc4_:b2ManifoldPoint = null;
  53.          var _loc5_:b2Body = null;
  54.          var _loc6_:b2Body = null;
  55.          var _loc7_:b2ContactPoint = null;
  56.          var _loc8_:int = 0;
  57.          var _loc9_:Array = null;
  58.          var _loc10_:b2ManifoldPoint = null;
  59.          var _loc11_:Boolean = false;
  60.          var _loc12_:uint = 0;
  61.          var _loc13_:int = 0;
  62.          _loc5_ = m_shape1.m_body;
  63.          _loc6_ = m_shape2.m_body;
  64.          m0.Set(m_manifold);
  65.          b2Collision.b2CollidePolygons(m_manifold,m_shape1 as b2PolygonShape,_loc5_.m_xf,m_shape2 as b2PolygonShape,_loc6_.m_xf);
  66.          _loc9_ = [false,false];
  67.          (_loc7_ = s_evalCP).shape1 = m_shape1;
  68.          _loc7_.shape2 = m_shape2;
  69.          _loc7_.friction = m_friction;
  70.          _loc7_.restitution = m_restitution;
  71.          if(m_manifold.pointCount > 0)
  72.          {
  73.             _loc8_ = 0;
  74.             while(_loc8_ < m_manifold.pointCount)
  75.             {
  76.                (_loc10_ = m_manifold.points[_loc8_]).normalImpulse = 0;
  77.                _loc10_.tangentImpulse = 0;
  78.                _loc11_ = false;
  79.                _loc12_ = _loc10_.id._key;
  80.                _loc13_ = 0;
  81.                while(_loc13_ < m0.pointCount)
  82.                {
  83.                   if(_loc9_[_loc13_] != true)
  84.                   {
  85.                      if((_loc4_ = m0.points[_loc13_]).id._key == _loc12_)
  86.                      {
  87.                         _loc9_[_loc13_] = true;
  88.                         _loc10_.normalImpulse = _loc4_.normalImpulse;
  89.                         _loc10_.tangentImpulse = _loc4_.tangentImpulse;
  90.                         _loc11_ = true;
  91.                         if(param1 != null)
  92.                         {
  93.                            _loc7_.position = _loc5_.GetWorldPoint(_loc10_.localPoint1);
  94.                            _loc2_ = _loc5_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint1);
  95.                            _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint2);
  96.                            _loc7_.velocity.Set(_loc3_.x - _loc2_.x,_loc3_.y - _loc2_.y);
  97.                            _loc7_.normal.SetV(m_manifold.normal);
  98.                            _loc7_.separation = _loc10_.separation;
  99.                            _loc7_.id.key = _loc12_;
  100.                            param1.Persist(_loc7_);
  101.                         }
  102.                         break;
  103.                      }
  104.                   }
  105.                   _loc13_++;
  106.                }
  107.                if(_loc11_ == false && param1 != null)
  108.                {
  109.                   _loc7_.position = _loc5_.GetWorldPoint(_loc10_.localPoint1);
  110.                   _loc2_ = _loc5_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint1);
  111.                   _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc10_.localPoint2);
  112.                   _loc7_.velocity.Set(_loc3_.x - _loc2_.x,_loc3_.y - _loc2_.y);
  113.                   _loc7_.normal.SetV(m_manifold.normal);
  114.                   _loc7_.separation = _loc10_.separation;
  115.                   _loc7_.id.key = _loc12_;
  116.                   param1.Add(_loc7_);
  117.                }
  118.                _loc8_++;
  119.             }
  120.             m_manifoldCount = 1;
  121.          }
  122.          else
  123.          {
  124.             m_manifoldCount = 0;
  125.          }
  126.          if(param1 == null)
  127.          {
  128.             return;
  129.          }
  130.          _loc8_ = 0;
  131.          while(_loc8_ < m0.pointCount)
  132.          {
  133.             if(!_loc9_[_loc8_])
  134.             {
  135.                _loc4_ = m0.points[_loc8_];
  136.                _loc7_.position = _loc5_.GetWorldPoint(_loc4_.localPoint1);
  137.                _loc2_ = _loc5_.GetLinearVelocityFromLocalPoint(_loc4_.localPoint1);
  138.                _loc3_ = _loc6_.GetLinearVelocityFromLocalPoint(_loc4_.localPoint2);
  139.                _loc7_.velocity.Set(_loc3_.x - _loc2_.x,_loc3_.y - _loc2_.y);
  140.                _loc7_.normal.SetV(m0.normal);
  141.                _loc7_.separation = _loc4_.separation;
  142.                _loc7_.id.key = _loc4_.id._key;
  143.                param1.Remove(_loc7_);
  144.             }
  145.             _loc8_++;
  146.          }
  147.       }
  148.    }
  149. }
  150.